home *** CD-ROM | disk | FTP | other *** search
/ Nebula 2 / Nebula Two.iso / SourceCode / NMK / Recorders / TranscriptLinker.m < prev    next >
Text File  |  1995-06-12  |  2KB  |  90 lines

  1. /***** TranscriptLinker.m -- liason object implementation
  2.     NeXTstep Measurement Kit
  3.     by Alex Meyer <ameyer@phoenix.Princeton.EDU>
  4.     for computer science senior thesis
  5.     16 April 1992 -- created
  6.     21 April 1992 -- cleaned up by using new TranscriptManager methods
  7. *****/
  8.  
  9. #import <stdlib.h>
  10. #import <stdio.h>
  11. #import <string.h>
  12. #import <appkit/Application.h>
  13. #import "TranscriptLinker.h"
  14.  
  15. @implementation TranscriptLinker
  16.  
  17. - init
  18. {
  19.     NXAtom tName;
  20.     char temp[512];
  21.  
  22.     sprintf(temp,"%s/%s.%s",NXHomeDirectory(),[NXApp appName],FILEEXT);
  23.     tName = NXUniqueString(temp);
  24.     manager = [TranscriptManager alloc];
  25.     [manager init];
  26.     [manager setFile:tName];
  27.     [manager load];
  28.     storage = [Storage alloc];
  29.     [storage initCount:0
  30.         elementSize:sizeof(tlRec)
  31.         description:NULL];
  32.     return (self);
  33. }
  34.  
  35.  
  36. - free    /* updates linked stats and saves first */
  37. {
  38.     unsigned i,num;
  39.  
  40.     num = [storage count];
  41.     for (i = 0;i < num;++i) {
  42.         tlPtr link;
  43.         void *Stats;
  44.  
  45.         link = (tlPtr) [storage elementAt:i];
  46.         Stats = (void *) [link->obj copyOfStats];
  47.         [manager copyIndex:link->index
  48.             statsFrom:Stats];
  49.         free(Stats);
  50.     }
  51.     [manager save];
  52.     [manager free];
  53.     [storage free];
  54.     [super free];
  55.     return (nil);
  56. }
  57.  
  58.  
  59. - connect:sender
  60. {
  61.     id succ;
  62.     unsigned ind;
  63.     tlRec link;
  64.     tmRec rec;
  65.  
  66.     link.obj = sender;
  67.     link.type = (unsigned) [sender type];
  68.     link.key = (NXAtom) [sender key];
  69.     succ = [manager copyRecordKey:link.key
  70.         ofType:link.type
  71.         into:&rec
  72.         where:&ind];
  73.     if (succ) {
  74.         [sender copyInStats:rec.Stats];
  75.         link.index = ind;
  76.     }
  77.     else {
  78.         rec.type = link.type;
  79.         rec.key = link.key;
  80.         rec.desc = (NXAtom) [sender desc];
  81.         rec.statsSize = (unsigned) [sender statsSize];
  82.         rec.Stats = (void *) [sender copyOfStats];
  83.         link.index = [manager addRecord:&rec];
  84.     }
  85.     [storage addElement:&link];
  86.     return (self);
  87. }
  88.  
  89. @end
  90.